Development of reliable, efficient software is aided by tools designed to aid in debugging and optimizing the software. Modern software products range from smaller applications that might run on a single computer to larger, more complex applications that operate across multiple computers connected by local area networks (LANs) or wide area networks (WANs) such as the Internet. Software developers use a variety of tools to assist in the development process, from pre-processors that analyze source code for potential issues and compilers that optimize code and organize symbolic information to runtime debuggers that use the symbolic information to assist developers in verifying the correct operation of the software.